From 2b1a26583985c28aac5e0a16f5fc73ebdf98ad6e Mon Sep 17 00:00:00 2001 From: tsteven4 Date: Wed, 8 Apr 2015 12:22:31 +0000 Subject: [PATCH] fix character set conversion issues with tomtom reader and writer. --- gpsbabel/reference/tomtom.gpx | 275 ++++++++++++++++++++++++++++++++++ gpsbabel/reference/tomtom.ov2 | Bin 0 -> 1788 bytes gpsbabel/testo.d/tomtom.test | 9 ++ gpsbabel/tomtom.cc | 11 +- 4 files changed, 290 insertions(+), 5 deletions(-) create mode 100644 gpsbabel/reference/tomtom.gpx create mode 100644 gpsbabel/reference/tomtom.ov2 diff --git a/gpsbabel/reference/tomtom.gpx b/gpsbabel/reference/tomtom.gpx new file mode 100644 index 000000000..517b25f35 --- /dev/null +++ b/gpsbabel/reference/tomtom.gpx @@ -0,0 +1,275 @@ + + + + + + Aebi Frères, Bogis-Bossey + Aebi Frères, Bogis-Bossey + Aebi Frères, Bogis-Bossey + + + Eco Energy Etoy + Eco Energy Etoy + Eco Energy Etoy + + + Mühle Severy + Mühle Severy + Mühle Severy + + + Centre Silo Croy + Centre Silo Croy + Centre Silo Croy + + + Michel Forestier Champagne + Michel Forestier Champagne + Michel Forestier Champagne + + + A S S Moudon + A S S Moudon + A S S Moudon + + + Caro Oron + Caro Oron + Caro Oron + + + Protector Lucens + Protector Lucens + Protector Lucens + + + Landi Hauts Geneveys + Landi Hauts Geneveys + Landi Hauts Geneveys + + + Von Bergen Payern + Von Bergen Payern + Von Bergen Payern + + + DSP Delley-Portalban + DSP Delley-Portalban + DSP Delley-Portalban + + + SGD Düdingen + SGD Düdingen + SGD Düdingen + + + Mühle Rytz Biberen + Mühle Rytz Biberen + Mühle Rytz Biberen + + + Trocknungsanlage Laupen + Trocknungsanlage Laupen + Trocknungsanlage Laupen + + + TR BARGEN + TR BARGEN + TR BARGEN + + + Gygi AG + Gygi AG + Gygi AG + + + Landi Heitenried + Landi Heitenried + Landi Heitenried + + + Flamatt + Flamatt + Flamatt + + + TR Suberg + TR Suberg + TR Suberg + + + Trocknung Säriswi + Trocknung Säriswi + Trocknung Säriswi + + + Mühle Affolter + Mühle Affolter + Mühle Affolter + + + Silo Soyhieres + Silo Soyhieres + Silo Soyhieres + + + Mühle Augsburger + Mühle Augsburger + Mühle Augsburger + + + Schenk AG Bümpliz + Schenk AG Bümpliz + Schenk AG Bümpliz + + + Meier Motoren + Meier Motoren + Meier Motoren + + + Mühle Gasel + Mühle Gasel + Mühle Gasel + + + Schenk AG + Schenk AG + Schenk AG + + + 11347 Däpp Lama + 11347 Däpp Lama + 11347 Däpp Lama + + + Grastrocknungsanlage Burgistein + Grastrocknungsanlage Burgistein + Grastrocknungsanlage Burgistein + + + 20254 Strahm Mühle AG + 20254 Strahm Mühle AG + 20254 Strahm Mühle AG + + + Jordi Mühle + Jordi Mühle + Jordi Mühle + + + Saatzucht Emmenmat + Saatzucht Emmenmat + Saatzucht Emmenmat + + + Steiner Zollbr + Steiner Zollbr + Steiner Zollbr + + + Walther Mühle + Walther Mühle + Walther Mühle + + + Hess Mühle Schwanden + Hess Mühle Schwanden + Hess Mühle Schwanden + + + Papiersäcke Sommer Rindlis + Papiersäcke Sommer Rindlis + Papiersäcke Sommer Rindlis + + + Saatgutzent Lyssach + Saatgutzent Lyssach + Saatgutzent Lyssach + + + Krähenbühl Walter + Krähenbühl Walter + Krähenbühl Walter + + + Lagerhaus Lohn + Lagerhaus Lohn + Lagerhaus Lohn + + + Kofmehl Mühle + Kofmehl Mühle + Kofmehl Mühle + + + Erbo Agro + Erbo Agro + Erbo Agro + + + Geiser Agro Langenthal + Geiser Agro Langenthal + Geiser Agro Langenthal + + + Samen Steffen (Geiser) + Samen Steffen (Geiser) + Samen Steffen (Geiser) + + + Lorze AG Roggwil + Lorze AG Roggwil + Lorze AG Roggwil + + + Marstall + Marstall + Marstall + + + Hammermühle Olten + Hammermühle Olten + Hammermühle Olten + + + Silo Olten + Silo Olten + Silo Olten + + + Merian Schlatthof + Merian Schlatthof + Merian Schlatthof + + + 12231 Genossensch Agrico + 12231 Genossensch Agrico + 12231 Genossensch Agrico + + + Muehle Muehlebach Wuerenlingen + Muehle Muehlebach Wuerenlingen + Muehle Muehlebach Wuerenlingen + + + Florin AG Muttenz + Florin AG Muttenz + Florin AG Muttenz + + + Provimi Kaiseraugst + Provimi Kaiseraugst + Provimi Kaiseraugst + + + Ultra Brag Auhafenstr 4 + Ultra Brag Auhafenstr 4 + Ultra Brag Auhafenstr 4 + + + Trocknungsge.Eiken + Trocknungsge.Eiken + Trocknungsge.Eiken + + diff --git a/gpsbabel/reference/tomtom.ov2 b/gpsbabel/reference/tomtom.ov2 new file mode 100644 index 0000000000000000000000000000000000000000..7f4c24e19a6f979e0c1750f012129c0a3f9458a9 GIT binary patch literal 1788 zcmZ8iU2GIp6h0jjLibip6x1p|R|LVNG_-)kppo5nI|Fp3=_(j~y1Tudxpa2!=FSXt zH}F6VN(=!Z{v<%aKSX09ia&`lB=CeG{vZVO(O@;=12ORdqmBCAofg6D!)DKS&bjA& z-#KU7CT9@+y}yIR`XfiRZ7!AFe%?Phq9UXqhXZN;lcNiVr@0z#Bu!pW z6={IC?SV+s%2~0joX#Qy*&mGqEd>}OQ%SjA}jC)bt6%M(V$T-Oj81(q-EMw#RELQ)8Fm%e<&sCO zsVM740O=(ZunHdSW3=y`YjLR`S5oMJNUP6VE~BRpfnLl_G={EtVX{^aRg;{10KX47 z0TU%@hpD770G6aqK;!Eet=T)B*A=l0v-b9EW_0_J>rztNAuQ7Lc3D|k+w~DNvc@Yp zuccK>BfBBNDMnv)yVTROe8no>KT)qkothwLDZtCmF#1tK1S8_){~{L9nTivsP~&}Y z?%K`h?DH=5F6&*nf|nB`f*Q|u%j##_Sah1vL;GA>rwvB9g=ORQ>^Vk5Z=ww$l4e>B z5?-v;WCR&A&c8p;=;GVJ?Q&*njt)K>O3z{C9>Q+V@uiDAQGz21z`JfI^gKc0NLO-18 z(Rw{vlZeY2XuCKinZ1&>M=M=xV?Mo*{V1A>=6T;}auy=Z&L0@9?eNHzDn|JhfRuKH zlR#ix>_$59IRKxs0K3pgj*jA+FUeva$cFf}D~$f^^k`6BA?GiA47$M!Iy7|Enj z0tHor5Stt5QF87Fd~iFXRa-sk>Fr(KV~?FZ?NM9}YMn$%{QktMlte};-`8A`LUhwP%-lA%XuNRg}fj!0` tS^_&iV6-0&PlT9nUNFMv`7{t<5evdsWYc`SC;M;v@9z1syQs#%#=lsF^;G}> literal 0 HcmV?d00001 diff --git a/gpsbabel/testo.d/tomtom.test b/gpsbabel/testo.d/tomtom.test index 6aefae5f1..3d4d25e21 100644 --- a/gpsbabel/testo.d/tomtom.test +++ b/gpsbabel/testo.d/tomtom.test @@ -13,3 +13,12 @@ compare ${REFERENCE}/ov2-geo-out.ref ${TMPDIR}/ov2.out rm -f ${TMPDIR}/ov2.out gpsbabel -i tomtom -f ${REFERENCE}/ov2-geo-out.ref -o gpsutil -F ${TMPDIR}/ov2.out compare ${REFERENCE}/ov2-in.ref ${TMPDIR}/ov2.out + +# round trip test including CP-1252 conversion +rm -f ${TMPDIR}/tomtom.gpx +gpsbabel -i tomtom -f ${REFERENCE}/tomtom.ov2 -o gpx -F ${TMPDIR}/tomtom.gpx +compare ${REFERENCE}/tomtom.gpx ${TMPDIR}/tomtom.gpx + +rm -f ${TMDIR}/tomtom.ov2 +gpsbabel -i gpx -f ${REFERENCE}/tomtom.gpx -o tomtom -F ${TMPDIR}/tomtom.ov2 +bincompare ${REFERENCE}/tomtom.ov2 ${TMPDIR}/tomtom.ov2 diff --git a/gpsbabel/tomtom.cc b/gpsbabel/tomtom.cc index 2247b215e..6e8bddf1d 100644 --- a/gpsbabel/tomtom.cc +++ b/gpsbabel/tomtom.cc @@ -41,6 +41,7 @@ #include "defs.h" #include // sprintf #include // qsort +#include #define MYNAME "TomTom" @@ -197,7 +198,7 @@ data_read(void) wpt_tmp->longitude = x/100000.0; wpt_tmp->latitude = y/100000.0; - wpt_tmp->description = desc; + wpt_tmp->description = STRTOUNICODE(desc); xfree(desc); desc = NULL; // TODO:: description in rectype 3 contains two zero-terminated strings @@ -298,7 +299,7 @@ write_float_as_long(gbfile* file, double value) } #define write_char(f,c) gbfputc((c),f) -#define write_string(f,s) gbfputcstr((s),f) +#define write_string(f,s) gbfwrite((s),1,strlen(s)+1,f) struct blockheader { struct hdr* start; @@ -335,16 +336,16 @@ write_blocks(gbfile* f, struct blockheader* blocks) if (global_opts.smart_names && blocks->start[i].wpt->gc_data->diff && blocks->start[i].wpt->gc_data->terr) { - snprintf(desc_field,sizeof(desc_field),"%s(t%ud%u)%s(type%dcont%d)",CSTRc(blocks->start[i].wpt->description), + snprintf(desc_field,sizeof(desc_field),"%s(t%ud%u)%s(type%dcont%d)",STRFROMUNICODE(blocks->start[i].wpt->description), blocks->start[i].wpt->gc_data->terr/10, blocks->start[i].wpt->gc_data->diff/10, - CSTRc(blocks->start[i].wpt->shortname), + STRFROMUNICODE(blocks->start[i].wpt->shortname), (int) blocks->start[i].wpt->gc_data->type, (int) blocks->start[i].wpt->gc_data->container); //Unfortunately enums mean we get numbers for cache type and container. } else { snprintf(desc_field, sizeof(desc_field), "%s", - CSTRc(blocks->start[i].wpt->description)); + STRFROMUNICODE(blocks->start[i].wpt->description)); } write_long(f, strlen(desc_field) + 14); write_float_as_long(f, blocks->start[i].wpt->longitude*100000); -- 2.30.2